// 路由鉴权, 路由什么条件下可以访问;
import router from '@/router'
import nprogress from 'nprogress'
import setting from './setting'

//引入进度条样式
import 'nprogress/nprogress.css'

// 获取用户相关的小仓库内部token数据,去判断用户是否已经登录成功
import userStore from './store/modules/user'
import pinia from './store'
nprogress.configure({ showSpinner: false })

let useUserStore = userStore(pinia)
// console.log(useUserStore)

// 全局守卫, 项目中任意路由切换都会触发钩子;

// 全局前置守卫
router.beforeEach(async (to: any, from: any, next: any) => {
  document.title = `${setting.title} - ${to.meta.title}`
  //to: 你要访问的那个路由;
  //from: 你从哪个路由来;
  //next: 路由的放行函数;
  nprogress.start()
  // next()

  // 获取token,判断你用户登录,还是未登录
  let token = useUserStore.token
  // 用户登录判断
  if (token) {
    // 登录成功, 访问login, 重定向到 / 根页面
    if (to.path == '/login') {
      next({ path: '/' })
    } else {
      // 非登录地址正常放行
      // next()
      // 有用户信息
      let name = useUserStore.name
      if (name) {
        //有用户信息
        // 直接放行
        next()
      } else {
        // 没有用户信息, 请求后台接口获取用户信息
        try {
          //获取用户信息, 再放行
          await useUserStore.userInfo()
          next()
        } catch (error) {
          // token过期: 获取用户信息失败
          // token信息被手动篡改, 获取用户信息失败;
          // 退出登录, -> 用户相关数据清空
          await useUserStore.exitSys()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  } else {
    //未登录
    if (to.path == '/login') {
      //登录页面直接放行
      next()
    } else {
      //其余页面未登录, 直接跳转到登录页面, 曾经想去的地址, 也附加在登录后地方
      next({ path: '/login', query: { redirect: to.path } })
    }
  }
})

router.afterEach((to: any, from: any, next: any) => {
  nprogress.done()
})

// 问题1: 任意路由切换实现进度条业务
